package com.iamteer.day19;

/**
主要回顾：枚举
某些方法所接收的数据必须是在固定范围之内，可以自定义一个类，然后私有化构造函数，在自定义类中创建本类的对象。

JDK1.5 后引入了枚举

枚举类的定义格式：
	enum 类名{
	
	}

	1. 枚举其实也是一个类
	2. 枚举值的修饰符是 public static final
	3. 枚举值是其所属类的数据类型
	4. 枚举类的构造方法默认修饰符是 private
	5. 枚举类可以定义自己的成员变量与成员函数
	6. 枚举类可以自定义构造函数，但构造函数的修饰符必须是 private
	7. 枚举类可以存在抽象方法，但是枚举值必须要实现抽象方法
	8. 枚举值必须要位于枚举类的第一个语句
	
switch: byte char short int String

 */

//用类来限制传入数据
class Gender{
	String value;
	
	public static final Gender male = new Gender("男");
	public static final Gender female = new Gender("女");
	public Gender(String value) {
		this.value = value;
	}
}

//本质上跟上面是一样的。
enum Gender1{
	male, female;
//	public static final Gender male = new Gender("男");
//	public static final Gender female = new Gender("女");
	
//	man("男"), woman("女");
//	String value;
//	private Gender1(String value){
//		this.value = value;
//	}
//	
//	public void getName() {
//		System.out.println(this.value);
//	}
}



class Member{
	String name;
	Gender gender;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Gender getGender() {
		return gender;
	}
	public void setGender(Gender gender) {
		this.gender = gender;
	}
}


enum Season{
	spring, summer, autumn, winter;
}


public class Enums {

	public static void main(String[] args) {
		Member member = new Member();
		member.setName("狗娃");
		member.setGender(Gender.male);
		System.out.println(member.getName() + "  " + member.getGender().value);
		
		testSwitch();
	}
	
	public static void testSwitch() {
		Season season = Season.winter;
		
		switch (season) {
		case spring:
			System.out.println("春天");
			break;
		case summer:
			System.out.println("夏天");
			break;
		case autumn:
			System.out.println("秋天");
			break;
		case winter:
			System.out.println("冬天");
			break;

		default:
			break;
		}
	}

}
